Берем War3ModelEditore->Windows->Camera Manager->Camera->Edit. Еще проще вручную в окне подобрать нужный вид и тогда в CameraManager->Create New From Current View, а прошлую камеру удалить.
Берем MdlVis->F3(Sequence Manager)->Выбираем анимацию->вкладка Bones-> выбираем главную кость и поворачиваем через Rotate в анимациях портрета так, как нужно.
Спецэффект не появляется, потому что ты его сразу удаляешь. Энергетические стены - это ворота. Их лучше ставить сразу на карте, открывать и хайдить их в начале игры, а в нужный момент показывать и закрывать.
Он лежит на случай если игре необходим данный реф. В РО ты мог иногда видеть необходимое приложение и варианты small, medium и large. Также по возможности спецэффекты и эффекты способностей могут к ней крепиться.
А collission насколько я помню отвечает за выделение или за столкновение летающих юнитов. На всякий случай оставляй, а то мало ли, да и места много не просит.
в основе полярных координат лежит прямоугольный треугольник который проходят в школе
тебе нужно найти координаты второго угла зная первый угол, его координаты и длину гипотенузы
формула такова
float x0,y0; // координаты угла
float angle; // угол
float hypot; // гипотенуза
float newX=x0+hypot*Cos(angle); // координата x второго угла
float newY=y0+hypot*Sin(angle); // координата y второго угла
координаты 2 точки используются если угол не известен (например нам нужно двинутся на 150 в направлении какого либо юнита)
тогда вместо угла мы вычисляем синус и косинус используя определения синуса и косинуса (узнаешь когда окончишь 6 класс или можешь почитать их учебник)
DrTema, пусть в чат вводится строка вида -move x,y
берём подстроку(назовём её s) с 6 позиции до конца строки
ищем в s знак , и запоминаем позицию знака (назовём её i)
тогда берём подстроку от s с 0 позиции до i
это будет наша координата x
а подстрока от s с i+1 до конца подстроки s это число y
на гуи это будет выглядеть громоздко
на джасс сделать намного проще EnergyFrost, я бы заменил то что у тебя в ретурне на
return i<StringLength(s)-1;
ибо входят координаты в рект или нет это уже проблемы того кто юзает систему
а вот были ли считанны данные или нет это уже важно
Да я как-то тоже столкнулся с такой проблемой и вот так решил, за основу взял не свою созданную способность. В карте всё наглядно показано, вот только на ГУИ.
Сделал так. Использую только MoveLocation..., можно даже вообще не удалять переменную точки а лишь двигать её, как курсор мыши, и указывать молниеносно и невидимо для всех триггеров одной точкой что и куда им делать. Все стрелы полетели как надо, в россыпь. Хотя когда Я делаю удаление точки в конце, это не отражается на следующем вызове триггера, так что можно и удалять, главное не удалять когда она ещё нужна до завершения триггера. Проверил на Хендлах, один Хендл создаётся один раз, чтобы объявить эту точку, а то что двигаю в цикле никак не прибавляет Хендлы. Получилась точка-указатель, как курсор мыши, и одной хватает, ведь Warcraft однопоточный. Оставлю ещё вопрос открытым на несколько часов, может Я не прав и кто-то меня поправит.
Чтобы было норм читать, надо хотя бы выделять содержимое каждого блока (типа function/endfunction, if/endif, loop/endloop) табуляцией. Если блок внутри блока, то двойная табуляция, и т. д.
В vJASS и cJASS не стоит использовать одновременно C-подобный и Turing-подобный (стандартный JASS) синтаксис.
А если ты неправильно поставишь пробелы, запятые или кавычки, тебе об этом скажет парсер =)
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
в структуре глобальные переменные?
ты хоть знаешь что такое структура и как их использовать?
если используешь структуру то нафига тебе глобальные переменные и параллельные массивы
короче читай статьи про структуры
что это такое, зачем они нужны и как их использовать
MadWay, нет. Обе иконки (как активная так и пассивная) могут иметь одну общую неактивную (DIS-иконка), если у них общее название.
Например, у тебя есть активная и пассивная иконки одной способности Headshot
ReplaceableTextures\CommandButtons\Headshot.blp - вот путь до активной иконки
ReplaceableTextures\PassiveButtons\Headshot.blp - вот до пассивной
ReplaceableTextures\CommandButtonsDisabled\DISHeadshot.blp - и до неактивной
Префиксы BTN, PASBTN в отличии от DIS не имеют никаких функций и фактически являются частью имени
Чтобы было норм читать, надо хотя бы выделять содержимое каждого блока (типа function/endfunction, if/endif, loop/endloop) табуляцией. Если блок внутри блока, то двойная табуляция, и т. д.
В vJASS и cJASS не стоит использовать одновременно C-подобный и Turing-подобный (стандартный JASS) синтаксис.
А если ты неправильно поставишь пробелы, запятые или кавычки, тебе об этом скажет парсер =)
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
1)Нужно ли при создании на джассе в конце обнулять/удалять что-то как при создании на ГУИ типо set u = null и т.д.?
Да нужно, но далеко не все. Чекни статьи, там про это расписано подробно.
2)Как видно на скрине юниту даются способности на 10 сек, можно ли в одной строчке это как то написать, а не писать каждый скилл в новой строке? Попытался сделать через , выдало ошибку.
Нет, только по одному. И TriggerSleepAction я бы использовать не стал, вместо них я бы заюзал таймеры.
3)Слышал про при конвертации в текст остаются пару лишних строк в триггере, абсолютно ненужные я удалил(Которые были при создании на ГУИ, скрин 2), нужно ли еще что-то удалять?
На JASS-е есть функция GetLearnedSkill(), которая выдает rawcode выученного умения. Создаешь переменную типа "целочисленная" с названием SkillCode, потом в начале действий триггера пишешь через Custom Script что-то типо этого:
set udg_SkillCode=GetLearnedSkill()
и затем делаешь какие тебе там нужны сравнения на переменную SkillCode.
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.
ИИ чтоли не кастует? Сделай триггерный каст, Событие - юнит обнаружил цель в пределах досягаемости, проглотить не в кулдауне и цель неуязвимый враг, пойти и проглотить юнита...
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.
war3.mpq
war3x.mpq
доставать mpq editor
на сайте есть
Даже более пошаговая инструкция:
Открываешь редактор варкрафта
Смотришь в редакторе объектов путь к модели (это надо включить там показать значения переменных или что-то там, тут пусть кто-то уточнит, если нужно, я наизусть не помню, хотя постоянно переключаю, как-то так Units\Creeps\StoneGolem\StoneGolem.mdx)
открываешь war3.mpq, ищешь там по пути модель в соответствующих папках
если ее нет, открываешь war3x.mpq и ищешь там
нажимаешь Export
выбираешь куда вынуть
подтверждаешь
все, открываешь папку, куда оно того и там модель и текстура
текстуру можно фотошопить, а модель мдлвисить как душа пожелает /
инструкция может быть чуть не точной, т. к. сочинялась на ходу
Крч похоже что программа не коректно работает на виедоус 10 или с wc3 версии 1.29. А там уже и 1.30 не за горами ._.
UP: Необходимые файлы для полной работы Mdlvis я нашел в этом треде.
А вот сами файлы.
Ну в идеале только канал пробивал иммунитет к магии (если понял о чем идет речь). Иначе будет писать "Не удалось натравить заклинание". Если говорим не про АОЕ-шные скилы
есть некоторые скилы, которые накидывают дебаффы или наводят на него (например перст боли, но урон иммунному не наносится. больше свожу к выводу, что это магический урон) ссылка quq_CCCP, что значит высшая? эта та, которая 6 уровне?
есть в константах
"Баланс: невосприимчивость к магии защищает от высших заклинаний" - Определяет, будет ли невосприимчивость к магии защищать от заклинаний, которые становятся доступны для изучения на 6-м (по умолчанию) уровне. По умолчанию константа равна "Нет".
это нашел в интернете. Похоже не все геройские абилки работают, а только "высшие". Все понял:
Любая высшая способность ( геройская, требуемый уровень выше 1 ).
Делаешь способность пустышку на основе "Канал", далее делаешь триггер с событием "Юнит начал направлять способность" в условиях ставишь
свою способность, а в действиях условиями на наличие предметов делаешь крафт. Всё что я тут написал - это отсылка к темам которые можно самому найти.
Чтобы было норм читать, надо хотя бы выделять содержимое каждого блока (типа function/endfunction, if/endif, loop/endloop) табуляцией. Если блок внутри блока, то двойная табуляция, и т. д.
В vJASS и cJASS не стоит использовать одновременно C-подобный и Turing-подобный (стандартный JASS) синтаксис.
А если ты неправильно поставишь пробелы, запятые или кавычки, тебе об этом скажет парсер =)
local real x = GetRandomReal(GetRectMinX(GetPlayableMapRect()), GetRectMaxX(GetPlayableMapRect()))
local real y = GetRandomReal(GetRectMinY(GetPlayableMapRect()), GetRectMaxY(GetPlayableMapRect()))
...
(действия с координатами)
...
Любые действия с локейшном можно переделать под координаты, если не используется z-координата, как сказано выше. Но z-координату используют не только лишь все, мало кто может это делать.
И обнулять ничего не придётся, так как действительное число не утекает.
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
1)Нужно ли при создании на джассе в конце обнулять/удалять что-то как при создании на ГУИ типо set u = null и т.д.?
Да нужно, но далеко не все. Чекни статьи, там про это расписано подробно.
2)Как видно на скрине юниту даются способности на 10 сек, можно ли в одной строчке это как то написать, а не писать каждый скилл в новой строке? Попытался сделать через , выдало ошибку.
Нет, только по одному. И TriggerSleepAction я бы использовать не стал, вместо них я бы заюзал таймеры.
3)Слышал про при конвертации в текст остаются пару лишних строк в триггере, абсолютно ненужные я удалил(Которые были при создании на ГУИ, скрин 2), нужно ли еще что-то удалять?
речь об активных орб-эффектах, я так понимаю? Потому что "нормальные" заклинания ловятся всегда.
Типа копья козы или аркан-орба дестра ты делаешь? Danil30:
8gabriel8, стандартные порталы как раз включаются триггером, так же триггерно им можно назначать области телепорта, так же они не ломают карту путей.
Насчет упираются в здание, карту путей ставь от портала, физ размер в 0.
SetUnitPosition довольно тяжелая операци, юзайте SetUnitX\Y в конце полета юзай SetUnitPosition для того чтобы юнит не залетел в непроходимое место.
Фильтр просто ужас, ну кто так фильтры делает?
Проверка на 'Aloc', я в ужасе на кой черт проверять на дамми если GropEnumUnitsInRange\Rect не выделяет москитов, тока EnumOfPlayer может пикнуть москитов, остальное не пикает их, на то они и москиты...
Вот как выглядит нормальный фильтр без локалок и прочего
function EnemyFilter takes nothing returns boolean
set bj_lastFilterUnit = GetFilterUnit( )
return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction
UnitDamageTargetEx - красиво но нафиг ненужно обводить в отдельную функцию с тучей аргументов + жутко неудобно, 100500 аргументов у функции и фиг знает за что какой от вечает, прямо так UnitDamageTarget, без отдельной функции.
Туча констант, тоже хорошо тока длят наработок, на деле ставь конкретные значения или юзай Difine vjass'a.
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
Не берите вы эти ульты для основы своих скиллов, они сделаны через одно место лиж бы работали в капмании, а там дальше хоть потоп.
Сделайте заклинание из канала, а юнитов вокруг делайте неуязвимыми.
Ох, без Jass тут не обойтись. Тебе придётся резать константы урона относительно типу защиту. Создавать внутренние константы в скрипте, которым тебе придётся настраивать перебой защиты пол кол-ву наносимого урона. А так же вносить каждого юнита в БД. Вдобавок сделать структуру или массив с логикой получения урона от опр. типа атаки. В общем тут жесткий геморр. А так, с GUI тут особо не повоюешь. Ну иначе быть не может..
Эта функция может читать строки из текстовиков и wts файла строки своего региона, она слупочна. Вспомни сколько грузятся карты без оптимизации, как долго может открываться вкладка - задания.
Любая строка ограничена, 256 символов латиницы и вдвое меньше символов кирилицы насколько я помню.
Никак не лечится, краткость сестра таланта и все такое.
» WarCraft 3 / Два вопроса
» WarCraft 3 / Координаты
» WarCraft 3 / Аттач
» WarCraft 3 / Юнит и принадлежность
» WarCraft 3 / Вопрос по Jass
» WarCraft 3 / Способность, зависящая от времени суток
» WarCraft 3 / Пассивный скилл через триггер
» WarCraft 3 / Зеленый квадрат вместо иконки
» WarCraft 3 / Вопрос по Jass
» WarCraft 3 / Способность
» WarCraft 3 / MdlVis
» WarCraft 3 / Нужно сделать способность
» WarCraft 3 / Вопрос по Jass
» WarCraft 3 / Триггерный автокаст?
» WarCraft 3 / Вопрос по оптимизации способностей
» WarCraft 3 / JNGP
» WarCraft 3 / Неуязвимость и ИИ
» WarCraft 3 / Строка
» WarCraft 3 / Изменить освещение